#include "os_obj.h"  
#include "dataproc.h"
#include "bsp_api.h"
#include "multi_malloc.h"
#include "str_ext.h"
#include "sys_init.h"
#include "sys_malloc.h"

/*******************************************************************************
* @brief  CCM LOCK.
*******************************************************************************/
uu16 mem_sram_lock(void)
{
    uu16 st;
    
    if(osOK == osMutexWait(os_obj.mid_malloc, 1000))
        st = 0;
    else
        st = 1;
    
    return st;
}

/*******************************************************************************
* @brief  CCM UNLOCK.
*******************************************************************************/
void mem_sram_unlock(void)
{
    osMutexRelease(os_obj.mid_malloc);
}


/*******************************************************************************
* @brief  创建内存池 SRAM.
*******************************************************************************/
#define MEM_SRAM_SIZE							(48 * 1024)
#define MEM_SRAM_BLOCK_SIZE						(64)

uu64 mem_sram_map[MEM_SRAM_SIZE / 8] OBJ_SECTION(".sram");						// 内存池
uu16 mem_sram_tab[MEM_SRAM_SIZE / MEM_SRAM_BLOCK_SIZE] OBJ_SECTION(".sram");	// 内存分配表
multi_malloc_info_type mem_sram_info={0};										// 工作信息
multi_malloc_api_ref(mem_sram);													// 接口引用声明
const multi_malloc_type mem_sram = 												// 信息描述
{
	mem_sram_map,
	mem_sram_tab,
	MEM_SRAM_SIZE,
	MEM_SRAM_BLOCK_SIZE,
	MEM_SRAM_SIZE/MEM_SRAM_BLOCK_SIZE,
	mem_sram_lock,
	mem_sram_unlock,
	&mem_sram_info,
	multi_malloc_api_name(mem_sram)
};
multi_malloc_api_make(mem_sram);				// 创建API接口

/*******************************************************************************
* @brief  创建内存池 CCM.
*******************************************************************************/
#define MEM_CCM_SIZE							(28 * 1024)
#define MEM_CCM_BLOCK_SIZE						(64)

#define mem_ccm_map			((void*)(0x20020000 + 0x1000))						// 内存池
#define mem_ccm_tab			((void*)(0x20020000 + 0x800))						// 内存分配表
multi_malloc_info_type mem_ccm_info={0};										// 工作信息
multi_malloc_api_ref(mem_ccm);													// 接口引用声明
const multi_malloc_type mem_ccm = 												// 信息描述
{
	mem_ccm_map,
	mem_ccm_tab,
	MEM_CCM_SIZE,
	MEM_CCM_BLOCK_SIZE,
	MEM_CCM_SIZE/MEM_CCM_BLOCK_SIZE,
	mem_sram_lock,
	mem_sram_unlock,
	&mem_ccm_info,
	multi_malloc_api_name(mem_ccm)
};
multi_malloc_api_make(mem_ccm);				// 创建API接口

